package com.nsgf.library.view;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.zhht.htzx.R;

/**
 * 自定义的单选控件
 *
 * @author gc
 * @version 1.0
 * @ClassName: RadioButton
 * @date 2024年9月13日 下午9:28:33
 */
public class MyRadioButton extends RelativeLayout {
    /**
     * The Btn image.
     */
// 显示图标
    private ImageView btn_image;

    /**
     * The Count text.
     */
// 显示文字的TextView
    private TextView count_text;

    /**
     * The Tv text.
     */
// 显示文字的TextView
    private TextView tv_text;

    private boolean checked = false;// 设置是否选中,默认未false未选中

    private boolean counter = false;// 设置是否选中,默认未false未选中

    // 声明数组保存背景颜色,其中int[0]--未选中时的背景颜色,int[1]选中时的背景颜色
    private int[] bgs = new int[2];

    // 选中状态发生改变时的接口调用
    private OnCheckedChangedListener onCheckedChangedListener;

    private int id;// 控件的id

    private int textColor;

    private int textCheckColor;


    /**
     * Instantiates a new My radio button.
     *
     * @param context the context
     */
    public MyRadioButton(Context context) {
        super(context);
    }

    /**
     * 自己写的自定义控件必须实现这个构造方法
     *
     * @param context the context
     * @param attrs   the attrs
     */
    public MyRadioButton(Context context, AttributeSet attrs) {
        super(context, attrs);
        // 设置ImageView的宽高为自适应
        LayoutParams imageParam =
            new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

        // 设置TextView的宽高为自适应
        LayoutParams textParam =
            new LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT);

        // 设置ImageView显示在中间
        imageParam.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
        imageParam.setMargins(0, 10, 0, 0);
        // 设置TextView显示在中间
        textParam.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
        textParam.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
        textParam.setMargins(0, 5, 0, 10);

        // 创建ImageView控件
        btn_image = new ImageView(context);
        // 创建TextView控件
        tv_text = new TextView(context);
        // 为ImageView添加Params
        btn_image.setLayoutParams(imageParam);
        // 为TextView添加Params
        tv_text.setLayoutParams(textParam);

        addView(btn_image);// 添加ImageView到View
        addView(tv_text);// 添加TextView到View

        // 引入自定义属性
        TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.custom_attr);

        counter = ta.getBoolean(R.styleable.custom_attr_counter, false);
        if (counter) {
            // 设置计数TextView的宽高为自适应
            LayoutParams countParam =
                new LayoutParams(LayoutParams.WRAP_CONTENT,
                    LayoutParams.WRAP_CONTENT);
            countParam.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);
            count_text = new TextView(context);
            count_text.setLayoutParams(countParam);
            addView(count_text);// 添加TextView到View

            count_text.setGravity(Gravity.CENTER);
            count_text.setTextColor(getResources().getColor(R.color.white));
            count_text.setTextSize(10);
            count_text.setVisibility(View.GONE);
            // count_text.setBackgroundResource(R.drawable.em_unread_count_bg);// 选中时的背景
        }
        // 获取xml布局中设置的值
        // 获取属性id
        int resourceId = ta.getResourceId(R.styleable.custom_attr_text, 0);
        // 根据判断是属性id,还是直接设置的属性值,设置显示的内容
        if (resourceId > 0) {// 设置的属性id(reference)
            tv_text.setText(ta.getResources().getString(resourceId));
        } else {// 文本内容
            tv_text.setText(ta.getString(R.styleable.custom_attr_text));
        }
        textColor = ta.getColor(R.styleable.custom_attr_textColor, getResources().getColor(R.color.radio_text_check_color));
        textCheckColor = ta.getColor(R.styleable.custom_attr_textColorCheck, getResources().getColor(R.color.radio_text_check_color));

        // 设置字体大小
        tv_text.setTextSize(ta.getFloat(R.styleable.custom_attr_textSize, 12));
        // 设置字体颜色
        tv_text.setTextColor(textColor);

        // 获取控件的id属性id
        id = ta.getResourceId(R.styleable.custom_attr_id, -1);
        // 设置控件id
        if (id != -1) {
            this.setId(id);
        }
        // 设置是否选中
        checked = ta.getBoolean(R.styleable.custom_attr_checked, false);
//        // 获取未选中时的背景
        bgs[0] = ta.getResourceId(R.styleable.custom_attr_unCheckedBg, Color.TRANSPARENT);
        // 获取选中时的背景
        bgs[1] = ta.getResourceId(R.styleable.custom_attr_checkedBg, Color.TRANSPARENT);
        // 根据选中状况设置背景颜色
        updateBg();
        updateTextColor(textColor, textCheckColor);

        // 设置当前控件的点击事件
        this.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // 更改选中状态
                checked = !checked;
                // 更改背景颜色
                updateBg();
                updateTextColor(textColor, textCheckColor);
                if (onCheckedChangedListener != null) {
                    // 调用接口的选中状态改变事件
                    onCheckedChangedListener.onCheckedChaged(id, checked);
                }
            }
        });

        ta.recycle();// 回收资源
    }

    /**
     * Instantiates a new My radio button.
     *
     * @param context the context
     * @param attrs   the attrs
     * @param theme   the theme
     */
    public MyRadioButton(Context context, AttributeSet attrs, int theme) {
        super(context, attrs, theme);
    }

    /**
     * 设置TextView显示的文字
     *
     * @param text 显示的文字
     */
    public void setText(String text) {
        tv_text.setText(text);
    }

    /**
     * 设置文本颜色
     *
     * @param resource the resource
     */
    public void setTextColor(int resource) {
        tv_text.setTextColor(resource);
    }

    /**
     * 设置文本字体大小
     *
     * @param size the size
     */
    public void setTextSize(float size) {
        tv_text.setTextSize(size);
    }

    /**
     * 设置选中状态
     *
     * @param checked the checked
     */
    public void setChecked(boolean checked) {
        this.checked = checked;
        // 更改背景色
        updateBg();
        // 更改文字颜色
        updateTextColor(textColor, textCheckColor);
    }

    /**
     * 设置选中时的背景颜色
     *
     * @param bgId the bg id
     */
    public void setCheckedBg(int bgId) {
        bgs[1] = bgId;
    }

    /**
     * 设置未选中时的背景
     *
     * @param bgId the bg id
     */
    public void setUnCheckedBg(int bgId) {
        bgs[0] = bgId;
    }

    /**
     * Update bg.
     */
    /* 更改背景颜色 */
    private void updateBg() {
        // 根据选中状况设置背景颜色
        if (checked) {
            btn_image.setBackgroundResource(bgs[1]);// 选中时的背景
        } else {
            btn_image.setBackgroundResource(bgs[0]);// 未选中时的背景
        }
    }

    /**
     * Update text color.
     *
     * @param color      the color
     * @param checkColor the check color
     */
    /* 更改文字颜色 */
    private void updateTextColor(int color, int checkColor) {
        // 根据选中状况设置文字颜色
        if (checked) {
            setTextColor(Color.parseColor("#32A243"));// 选中时的文字颜色
        } else {
            setTextColor(Color.parseColor("#333333"));// 未选中时的文字颜色
        }
    }

    /**
     * Update counter.
     *
     * @param count the count
     */
    /* 更改数值 */
    public void updateCounter(String count) {
        if (counter) {
            if (!TextUtils.isEmpty(count) && Integer.parseInt(count) > 0) {
                count_text.setVisibility(View.VISIBLE);
                count_text.setText(count);
            } else {
                count_text.setVisibility(View.GONE);
                count_text.setText(count);
            }
        }
    }

    /**
     * 设置背景颜色,注意数组中的下标0表示未选中时的背景 下标1表示选中时的背景
     *
     * @param bgs the bgs
     */
    public void setBg(int[] bgs) {
        // 数组长度2位,不能少于2位,多余的也只取,数组中的前2位
        if (bgs.length >= 2) {
            this.bgs[0] = bgs[0];
            this.bgs[1] = bgs[1];
        }
    }

    /**
     * 设置选中状态发生改变时的接口
     *
     * @param onCheckedChangedListener the on checked changed listener
     */
    public void setOnCheckChangedListener(OnCheckedChangedListener onCheckedChangedListener) {
        this.onCheckedChangedListener = onCheckedChangedListener;
    }

    /**
     * 选中状态发生改变时的处理
     *
     * @author haoran.shu
     * @version 1.0
     * @ClassName: setOnCheckedChangedListener
     * @date 2014年6月4日 下午12:00:03
     */
    public interface OnCheckedChangedListener {
        /**
         * 选中状态发生改变时调用
         */
        void onCheckedChaged(int id, boolean checked);
    }
}

